/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import dao.StaticsStrings;
import dao.impl.Delete;
import dao.impl.GrowMessages;
import dao.impl.RatingDaoImpl;
import dao.impl.RedimensionarDaoImpl;
import dao.impl.TransacoesDaoImpl;
import dao.impl.VeiculosDaoImpl;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import model.Usuarios;
import model.Veiculos;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;

/**
 *
 * @author rafael
 */
@ManagedBean
@SessionScoped
public class BeanVeiculo implements Serializable {

    /**
     * Creates a new instance of BeanVeiculo
     */
    private Veiculos veiculo;
    private String search = "";
    private boolean myCar = false;
    private int rating;
    private List<Veiculos> listaVeiculos;

    public BeanVeiculo() {
        this.veiculo = new Veiculos();
    }

    public boolean validateCurtirComentar(Usuarios usuarioLocal, Integer veiculo, boolean logado) {

        if (!logado) {
            return true;
        } else {
            if (usuarioLocal == null) {
                return true;
            } else {
                if (veiculo == null) {
                    return true;
                } else {
                    if (usuarioLocal.getPkId().toString() == null ? veiculo.toString() == null : usuarioLocal.getPkId().toString().equals(veiculo.toString())) {
                        return true;
                    } else {
                        return false;
                    }
                }
            }
        }
    }

    public boolean validateComprar(Usuarios usuarioLocal, Integer veiculo, boolean logado, Integer pkVeiculos) {

        if (!logado) {
            return true;
        } else {
            if (usuarioLocal == null) {
                return true;
            } else {
                if (veiculo == null) {
                    return true;
                } else {
                    if (usuarioLocal.getPkId().toString() == null ? veiculo.toString() == null : usuarioLocal.getPkId().toString().equals(veiculo.toString())) {
                        return true;
                    } else {
                        if (new TransacoesDaoImpl().selectComprador(Integer.parseInt(usuarioLocal.getPkId().toString()), pkVeiculos).size() > 0) {
                            return true;
                        } else {
                            if (new TransacoesDaoImpl().isOpen(pkVeiculos)) {
                                return true;
                            } else {
                                return false;
                            }
                        }
                    }
                }
            }
        }
    }

    public boolean validateEditarExcluirf(Usuarios usuarioLocal, Integer veiculo, boolean logado) {

        if (!logado) {
            return true;
        } else {
            if (usuarioLocal == null) {
                return true;
            } else {
                if (veiculo == null) {
                    return true;
                } else {
                    if (usuarioLocal.getPkId().toString() == null ? veiculo.toString() == null : usuarioLocal.getPkId().toString().equals(veiculo.toString())) {
                        return false;
                    } else {
                        return true;
                    }
                }
            }
        }
    }

    public void search() {
        this.listaVeiculos = new VeiculosDaoImpl().search(this.search);
    }

    public void meusVeiculos(Integer id) {
        this.search = "";
        this.myCar = true;
        this.listaVeiculos = new VeiculosDaoImpl().selectByUser(id);
        int x = 0;
    }

    public void inserirVeiculos(ActionEvent actionEvent, Usuarios usuarioLocal, FileUploadEvent fileUploadEvent) {

        if (veiculo.getNome().length() < 5) {
            GrowMessages.errorMessage("Erro", "Mínimo de 5 caracteres para o campo 'Nome' ");
        } else {
            if (veiculo.getAnoFabricacao().length() < 2) {
                GrowMessages.errorMessage("Erro", "Mínimo de 5 caracteres para o campo 'Ano' ");
            } else {
                if (veiculo.getCombustivel().length() < 5) {
                    GrowMessages.errorMessage("Erro", "Mínimo de 5 caracteres para o campo 'Combusível' ");
                } else {
                    if (veiculo.getMarca().length() < 5) {
                        GrowMessages.errorMessage("Erro", "Mínimo de 5 caracteres para o campo 'Marca' ");
                    } else {
                        VeiculosDaoImpl daoImpl = new VeiculosDaoImpl();
                        veiculo.setUsuarios(usuarioLocal);
                        if (daoImpl.selectMax() == null) {
                            veiculo.setUrlImagem("1");
                        } else {
                            veiculo.setUrlImagem(String.valueOf(daoImpl.selectMax() + 1));
                        }                       
                        veiculo.setCor("#" + veiculo.getCor());
                        try {
                            daoImpl.inserir(veiculo);
                            inserirImagemInserirVeiculos(fileUploadEvent);
                            RequestContext.getCurrentInstance().execute("diagIncluirVeiculos.hide();");
                        } catch (Exception e) {
                        }
                    }
                }
            }
        }
    }

    public void inserirImagemInserirVeiculos(FileUploadEvent fileUploadEvent) throws IOException {

        File imagemDefault = new RedimensionarDaoImpl().criarArquivoImagem(fileUploadEvent);
        File fileThumbs = new RedimensionarDaoImpl().criarArquivoThumbs(fileUploadEvent);
        new RedimensionarDaoImpl().criarArquivoTemporario(fileUploadEvent);
        new RedimensionarDaoImpl().redimensionarImagem(imagemDefault, imagemDefault);
        new RedimensionarDaoImpl().criarMiniaturas(fileThumbs, fileThumbs);
    }

    public void alterarVeiculos(ActionEvent actionEvent, Usuarios usuarioLocal, Veiculos veiculo) {
        VeiculosDaoImpl daoImpl = new VeiculosDaoImpl();
        veiculo.setUsuarios(usuarioLocal);
        veiculo.setCor("#" + veiculo.getCor());
        daoImpl.atualizar(veiculo);
    }

    public void excluirVeiculos(Usuarios usuarioLocal, Veiculos veiculo) {
        veiculo.setUsuarios(usuarioLocal);
        Delete.deleteVeiculo(veiculo);
    }

    public String getRating() {
        int temp = new RatingDaoImpl().getRatingVeiculos(this.veiculo.getPkVeiculos()).size();
        if (temp > 1) {
            return String.valueOf(temp) + StaticsStrings.CURTIRAM;
        } else if (temp == 0) {
            return StaticsStrings.PRIMEIRO_CURTIR;
        } else {
            return String.valueOf(temp) + StaticsStrings.CURTIU;
        }
    }

    public List<Veiculos> getListaVeiculos() {
        if (("".equals(this.search)) && (this.myCar == false)) {
            return new VeiculosDaoImpl().selectAll();
        } else {
            return this.listaVeiculos;
        }
    }

    public void resetVeiculos() {
        this.veiculo = new Veiculos();
    }

    public void resetSearch() {
        this.myCar = false;
        this.search = "";
    }

    public Veiculos getVeiculo() {
        return veiculo;
    }

    public void setVeiculo(Veiculos veiculo) {
        this.veiculo = veiculo;
    }

    public String getSearch() {
        return search;
    }

    public void setSearch(String search) {
        this.search = search;
    }
}
